package com.itheima.reggie;
import lombok.extern.slf4j.Slf4j;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.transaction.annotation.EnableTransactionManagement;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.HashMap;

/**
 * @author ：sean
 * @date ：Created in 2022/5/16
 * @description ：启动类
 * @version: 1.0
 */

@SpringBootApplication
@Slf4j
@MapperScan("com.itheima.reggie.mapper")
@ServletComponentScan
@EnableTransactionManagement // 开启注解事务
@EnableCaching
public class ReggieApplication {
	public static void main(String args[]) throws ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchMethodException, InvocationTargetException {
		log.info("[启动瑞吉项目]");
		SpringApplication.run(ReggieApplication.class,args);
		// Java反射了解？ Class（类） Method（方法） Filed（属性）
		// 扫描包，包里面有类，动态的构建对象，动态的调用对象的方法
		// 反射：就是动态获取类，动态构建类的对象，动态调用方法
		// 把磁盘扫描到的类，加载到JVM
//		String scanClass = "com.itheima.reggie.service.impl.DishServiceImpl";
//		Class<?> aClass = Class.forName(scanClass);
//		// 通过字节码对象，调用默认构造方法，构建一个对象
//		Object o = aClass.newInstance();
//		// 通过方法名，动态获取方法对象
//		Method m = o.getClass().getMethod("saveWithFlavor");
//		// 动态调用方法
//		m.invoke(o,"ssss");
	}
}
